#include <iostream>
using namespace std;

int main()
{
    int i = 30;
    cout<<"&i="<<&i<<endl;
    cout<<"i="<<i<<endl;
    cout<<endl;

    int *pi = &i;
    cout<<"一级指针：*pi = "<<*pi<<endl;
    cout<<"一级指针：pi="<<pi<<endl;
    cout<<endl;

    int **ppi = &pi;
    cout<<"二级指针内容：**ppi = "<<**ppi<<endl;
    cout<<"二级指针指向：ppi="<<ppi<<endl;
    cout<<endl;

    *pi = 40;
    cout<<"修改一级指针内容后：*pi="<<*pi<<endl;
    cout<<"修改一级指针内容后：**ppi="<<**ppi<<endl;
    cout<<"原变量的内容为：i="<<i<<endl;
    cout<<endl;

    **ppi = 50;
    cout<<"修改二级指针内容后：*pi="<<*pi<<endl;
    cout<<"修改二级指针内容后：**ppi="<<**ppi<<endl;
    cout<<"原变量的内容为：i="<<i<<endl;
    cout<<endl;

    int o = 20;
    pi = &o;
    cout<<"修改一级指针指向后：*pi="<<*pi<<endl;
    cout<<"修改一级指针指向后：pi="<<pi<<endl;
    cout<<"修改一级指针指向后：**ppi="<<**ppi<<endl;
    cout<<"修改一级指针指向后：ppi="<<ppi<<endl;
    cout<<"原变量的内容为：i="<<i<<endl;
    cout<<endl;

    int a = 10;
    *ppi = &a; // 修改的是一级指针的指向
    cout<<"通过二级指针修改一级指针指向后：*pi="<<*pi<<endl;
    cout<<"通过二级指针修改一级指针指向后：pi="<<pi<<endl;
    cout<<"通过二级指针修改一级指针指向后：**ppi="<<**ppi<<endl;
    cout<<"通过二级指针修改一级指针指向后：ppi="<<ppi<<endl;
    cout<<"原变量的内容为：i="<<i<<endl;
    cout<<endl;
 
    int *pa = &a;
    ppi = &pa; // 修改二级指针指向另一个一级指针
    cout<<"*pa="<<*pa<<endl;
    cout<<"pa="<<pa<<endl;
    cout<<"修改二级指针ppi指向一级指针pa后：*pi="<<*pi<<endl;
    cout<<"修改二级指针ppi指向一级指针pa后：pi="<<pi<<endl;
    cout<<"修改二级指针ppi指向一级指针pa后：**ppi="<<**ppi<<endl;
    cout<<"修改二级指针ppi指向一级指针pa后：ppi="<<ppi<<endl; 
    cout<<endl;

    a = 11;
    cout<<"*pa="<<*pa<<endl;
    cout<<"pa="<<pa<<endl;
    cout<<"*pi="<<*pi<<endl;
    cout<<"pi="<<pi<<endl;
    cout<<"**ppi="<<**ppi<<endl; // 一级指针的地址指向的地址指向的值
    cout<<"*ppi="<<*ppi<<endl; // 一级指针的地址指向的地址
    cout<<"ppi="<<ppi<<endl; // 一级指针的地址




    system("pause");
    return 0;
}